package com.example.common.room

import android.content.Context
import androidx.room.Database
import androidx.room.Room
import androidx.room.RoomDatabase

/**
 * 视频数据库
 */
@Database(
    // 定义数据库中的实体类为VideoFavorite和CommentDraft
    entities = [VideoFavorite::class, CommentDraft::class],
    // 数据库版本号为2
    version = 2,
    // 不导出数据库模式信息
    exportSchema = false
)
// 定义抽象类VideoDatabase继承自RoomDatabase
abstract class VideoDatabase : RoomDatabase() {

    // 定义抽象方法返回VideoFavoriteDao实例
    abstract fun videoFavoriteDao(): VideoFavoriteDao

    // 定义抽象方法返回CommentDraftDao实例
    abstract fun commentDraftDao(): CommentDraftDao

    companion object {
        // 使用@Volatile注解确保多线程环境下的可见性
        @Volatile
        // 声明可空的数据库实例
        private var INSTANCE: VideoDatabase? = null

        // 获取数据库实例的函数
        fun getDatabase(context: Context): VideoDatabase {
            // 如果实例已存在则直接返回，否则进入同步代码块创建新实例
            return INSTANCE ?: synchronized(this) {
                // 使用Room.databaseBuilder构建数据库实例
                val instance = Room.databaseBuilder(
                    // 使用ApplicationContext避免内存泄漏
                    context.applicationContext,
                    // 指定数据库类
                    VideoDatabase::class.java,
                    // 指定数据库名称
                    "video_database"
                ).fallbackToDestructiveMigration() // 版本升级时允许清空数据库
                    .build()
                INSTANCE = instance
                // 返回创建的实例
             return  instance
            }
        }
    }
}
